/**
 * Eclipse Outliner
 * Copyright (C) 2006 Jeff Mesnil
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License. 
 */
package net.jmesnil.outliner.ui.actions;

import net.jmesnil.opml.core.IOutline;
import net.jmesnil.opml.core.IOutlineNode;
import net.jmesnil.outliner.ui.editors.OutlinerEditor;
import net.jmesnil.outliner.ui.internal.OutlinerEditorInput;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchWindow;

public class OutlineInsertNewAction extends Action {

    private static final String ID = "net.jmesnil.outliner.ui.actions.OutlineInsertNewAction";

    private IWorkbenchWindow window;

    public OutlineInsertNewAction(IWorkbenchWindow window) {
        this.window = window;
        setId(ID);
        setActionDefinitionId(ID);
        setAccelerator(SWT.CR);
        setText("Insert new outline");

    }

    public void run() {
        OutlinerEditor editor = (OutlinerEditor) window.getActivePage()
                .getActiveEditor();
        TreeViewer viewer = editor.getViewer();
        TreeSelection selection = (TreeSelection) viewer.getSelection();
        Object element = selection.getFirstElement();
        if (element instanceof IOutline) {
            IOutline outline = (IOutline) element;
            IOutlineNode parent = outline.getParent();
            IOutline newOutline = null;
            if (parent == null) {
                OutlinerEditorInput input = (OutlinerEditorInput)editor.getEditorInput();
                newOutline = input.getOPML().getBody().insertAfter("", outline);
            } else {
                newOutline = parent.insertAfter("", outline);
            }
            viewer.refresh(true);
            viewer.editElement(newOutline, 0);
        }
    }
}
